package cn.sxw.ld.common.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

/**
 * ClassName:WebMvConfig
 * Package:cn.sjxy.graduation.common.config
 * Description: 配置资源映射路径
 *
 * @Date:2023/2/23 18:09
 * @Author:SXW
 */
@Slf4j
@Configuration
public class WebMvConfig extends WebMvcConfigurationSupport {

    /**
     * 设置静态资源映射路径的
     *
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射访问路径，将web反问路径映射到 static 下
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
    }

    /**
     * 重写消息转换器，不重写则使用 SpringMvc 提供的默认转换器
     * <p>
     * 拓展转换器步骤：
     * 1. 覆写 extendMessageConverters 方法
     * 2. 在方法中创建消息转换器对象，调用类中的设置转换器方法，传入自定义转化器对象
     * 3. 将自定义转换器添加注册到 webMvc 的转换器列表中
     *
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // webMvc 提供的消息转换器
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        // 使用对象转换器，通过 jackson 将 java 对象转为 json 格式
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        // 提高自定义转换器的优先级，有多个转化器
        // 将自定义转换器放在最前面使用
        converters.add(0, messageConverter);
    }
}
